package student.aistar.day15.syn;

/**
 * 对象锁
 *      Runnable - 为什么可以做到共享资源的
 *
 *      //SynObjLockDemo()仅仅初始化了一次
 *      Runnable r = new SynObjLockDemo();
 *      Thread t1 = new Thread(r);
 *      Thread t2 = new Thread(r);
 *
 *      t1, t2都是借助于同一个r对象构建出来的 -> t1, t2 - 竞争的同一把锁
 */
public class SynObjLockDemo implements Runnable{
    @Override
    public void run() {
        test();
    }

    /**
     * 其中的效果是
     *      得到锁资源 lock
     * Thread-0:0
     *      sleep(1000)
     * Thread-0:1
     *      释放锁资源 unlock - 自动释放
     * Thread-1:0
     * Thread-1:1
     */
   private synchronized void test() {//申请的对象锁 - 每个对象拥有一把自己的锁
                        //如果是同一个对象 - 申请应该同一个对象
                        //就可能造成同步阻塞
       System.out.println(Thread.currentThread().getName() + ":0");
       try {
           Thread.sleep(1000);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
       System.out.println(Thread.currentThread().getName() + ":1");

    }
}
class TestSynObjLockDemo{
    public static void main(String[] args) {
        Runnable r = new SynLock2Demo();
        Thread t1 = new Thread(r);
        Thread t2 = new Thread(r);

        t1.start();
        t2.start();
    }
}
